/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package br.ufpr.tads.suck.model;



import java.io.FileNotFoundException;
import java.io.IOException;
import static java.lang.Integer.toHexString;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import br.ufpr.tads.suck.model.Agendamento;

/**
 *
 * @author julio
 */
public class AgendamentoDAO {

    private final Connection connection;
    private final String sqlsearch = "SELECT A.*,p.*,m.nome AS nome_medico FROM agendamento a, pessoa p, pessoa m WHERE a.id=p.id AND a.medico = m.id AND p.id=?";
    private final String sqldel = "delete from agendamento where id=?";
    private final String sqlupd = "update agendamento set diagnostico=?,receita=?,medico=? where id=?";
    private final String sqlins = "insert into agendamento(anamnese,estado, data) values (?,?,?)";
    //private final String obter = "select * from agendamento order by estado desc, dataag limit 1";
    private final String obter = "SELECT * FROM agendamento WHERE situacao = 1 AND estado > 0 ORDER BY estado DESC, dataag LIMIT 1";
    private final String sqlChamado = "SELECT * FROM agendamento WHERE situacao = 1 AND estado > 0 ORDER BY estado DESC, dataag LIMIT 1";

    public AgendamentoDAO() throws IOException, FileNotFoundException, ClassNotFoundException, SQLException {
        this.connection = ConnectionFactory.getConnection();
    }

    public void addagenda(Agendamento agendamento) throws SQLException, NoSuchAlgorithmException{
        PreparedStatement stmt = connection.prepareStatement(sqlins,PreparedStatement.RETURN_GENERATED_KEYS);
        stmt.setString(1, agendamento.getAnamnese());
        stmt.setString(3, agendamento.getData());
        stmt.setInt(2, agendamento.getEstado());
        stmt.executeUpdate();
        stmt.close();
        throw new AvisoException("Dados Inseridos com sucesso!");
    }
    public void upAgenda(Agendamento ag) throws SQLException{
       PreparedStatement stmt = connection.prepareStatement(sqlupd,PreparedStatement.RETURN_GENERATED_KEYS);
       stmt.setString(1, ag.getDiagnostico());
       stmt.setString(2, ag.getReceita());
       stmt.setInt(3, 1);
       stmt.setInt(4, ag.getId());
       stmt.execute();
       stmt.close();
        throw new AvisoException("Dados Inseridos com sucesso!");

    }
    
    /*
    public void upPessoa(Pessoa pessoa) throws SQLException, NoSuchAlgorithmException{
        connection.setAutoCommit(false);
        PreparedStatement stmt = connection.prepareStatement(sqluppes,PreparedStatement.RETURN_GENERATED_KEYS);
        stmt.setString(1, pessoa.getNome());
        this.upEndereco(pessoa);
        stmt.setDouble(2, pessoa.getTel());
        stmt.setString(3, pessoa.getEmail());
        stmt.setString(4, pessoa.getCpf());
        stmt.setInt(5, pessoa.getId());
        //stmt.setString(7, this.toMD5(pessoa.getSenha()));  
        stmt.executeUpdate();
        connection.commit();
        stmt.close();
        throw new AvisoException("Dados Atualizados com sucesso!");
    }
    */

    public Agendamento agendamento() throws SQLException, IOException, FileNotFoundException, ClassNotFoundException{
        PreparedStatement stmt = connection.prepareStatement(obter);
        ResultSet rs = stmt.executeQuery();
        Agendamento agendamento = new Agendamento();
        PessoaDao pessoa= new PessoaDao();
        rs.next();
        agendamento.setAnamnese(rs.getString("anamnese"));
        agendamento.setId(rs.getInt("id"));
        agendamento.setEstado(rs.getInt("estado"));
        agendamento.setPaciente(pessoa.listPessoa(Integer.parseInt(rs.getString("pessoa_id"))));
        //agendamento.setPaciente(pessoa.listPessoa(Integer.parseInt(rs.getString("medico"))));

        return agendamento;
    }

    public Agendamento agendamentoChamado() throws SQLException, IOException, FileNotFoundException, ClassNotFoundException{
        PreparedStatement stmt = connection.prepareStatement(sqlChamado);
        ResultSet rs = stmt.executeQuery();
        Agendamento agendamento = new Agendamento();
        PessoaDao pessoa= new PessoaDao();
        rs.next();
        agendamento.setAnamnese(rs.getString("anamnese"));
        agendamento.setId(rs.getInt("id"));
        agendamento.setEstado(rs.getInt("estado"));
        agendamento.setPaciente(pessoa.listPessoa(Integer.parseInt(rs.getString("pessoa_id"))));

        return agendamento;
    }

    public List<Agendamento> agendamentoPaciente(Pessoa paciente) throws SQLException, IOException, FileNotFoundException, ClassNotFoundException{
        PreparedStatement stmt = connection.prepareStatement(sqlsearch);
        stmt.setInt(1, paciente.getId());
        ResultSet rs = stmt.executeQuery();
        List<Agendamento> lista = new ArrayList();
        while (rs.next()) {
            Agendamento item = new Agendamento();
            item.setId(rs.getInt("id"));
            item.setAnamnese(rs.getString("anamnese"));
            item.setData(rs.getString("dataag"));
            item.setEstado(rs.getInt("estado"));
            item.setSituacao(rs.getInt("situacao"));
            item.setPaciente(paciente);
            Medico medico = new Medico();
            //String nome_medico = rs.getString("nome_medico");
            medico.setNome(rs.getString("nome_medico"));
            item.setMedico(medico);
            lista.add(item);
        }
        return lista;
    }
}
